package davey.wu.hamcrest.expected.interdef;

import org.hamcrest.Matcher;
import org.jmock.Expectations;

import davey.wu.hamcrest.expected.BaseExpected;

public interface BaseExpectedOp<T, E extends BaseExpectedOp<T, E>> {
	public E or();

	public E not();

	public E eq(T expected);

	public E type(Class<?> claz);

	public E is(Matcher<T> matcher);

	public E and(Matcher<?>... matchers);

	public E and(Iterable<Matcher<?>> matchers);

	public E or(Matcher<?>... matchers);

	public E or(Iterable<Matcher<?>> matchers);

	public E in(T... values);

	public E same(T value);

	public BaseExpected<T, E> matcher();
	
	public T match(Expectations expectations);
}
